package vn.com.pavibook.utils;

import org.springframework.stereotype.Repository;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import vn.com.pavibook.model.vo.BookVO;

@Repository
public class BookValidaton implements Validator{

	@SuppressWarnings("rawtypes")
	@Override
	public boolean supports(Class aclass) {
		return BookVO.class.equals(aclass);
	}
	
	@Override
	public void validate(Object object, Errors errors) {
		BookVO bookVO = (BookVO) object;
		if(!errors.hasFieldErrors("datePublish")){
			validateDatePublish(bookVO.getDatePublish(), errors);
		}
	}
	
	private void validateDatePublish(String datePublish,Errors errors){
		String regex = "([1-9]|[0-9][0-9])[/]([1-9]|[0-9][0-9])[/][1-2][0-9][0-9][0-9]";
		String[] elementDate;
		int theDay;
		int theMonth;
		int theYear;
		
		if (datePublish != null && !datePublish.isEmpty()){
			if (!datePublish.matches(regex)){
				errors.rejectValue("datePublish", "bookVO.datePublish", "Ngày không tồn tại");
			} else{
				elementDate = datePublish.split("/");
				theDay = Integer.parseInt(elementDate[1]);
				theMonth = Integer.parseInt(elementDate[0]);
				theYear = Integer.parseInt(elementDate[2]);
				if(theDay > 31 || theDay <1 || theMonth > 12 || theMonth <1){
					errors.rejectValue("datePublish", "bookVO.datePublish", "Ngày không tồn tại");
				}else{
					if ((theMonth == 4 || theMonth == 6 || theMonth == 9 || theMonth == 11)
							&& theDay == 31) {
						errors.rejectValue("datePublish", "bookVO.datePublish", "Ngày không tồn tại");
					} else if (theMonth == 2) {
						if(theDay > 29){
							errors.rejectValue("datePublish", "bookVO.datePublish", "Ngày không tồn tại");
						}else if (theDay == 29) {
							if(theYear % 4 == 0 && (theYear % 100 != 0 || theYear % 400 == 0)){
								System.out.println("-----Nam nhuan");
							}else{
								errors.rejectValue("datePublish", "bookVO.datePublish", "Ngày không tồn tại");
							}
						}
					}
				}
			}
		}
	}	

}
